//
// Created by wujehy on 2020/6/22.
//

#include <iostream>
#include "MysqlDB.h"
#include "SqliteDB.h"

// 你的业务操作 代码
void your_business(DataBaseImpl *db)
{
    int ret = 0;
    ret = db->initDataBase();
    std::cout <<" initDataBase ret = " << ret << std::endl;
    // 插入
    ret =  db->Insert("test1" , "data1");
    std::cout <<" Insert ret = " << ret << std::endl;
    // 查找
    std::string findData1 ;
    ret = db->Select("test1" , findData1);
    std::cout << " Select ret = " << ret << " find dara = " << findData1 <<std::endl;

    // 删除
    ret =  db->Delete("test1");
    std::cout <<" Delete ret = " << ret <<std::endl;
}
/**
 * @brief 在接口实现完成以后 , 更具实例化不同的实现 , 起到的动作相同  ,但是过程不同
 * @return
 */
int main ()
{
    // 模拟CRUD
    // 假设这是官方的实现
    std::cout <<" start sqlite  ... " << std::endl;
    DataBaseImpl *dataBase1 = new SqliteDB;
    your_business( dataBase1 );
    // 其他厂商 想要改别的数据库
    std::cout <<std::endl<<std::endl<<" start mysql  ... " << std::endl;
    DataBaseImpl *dataBase2 = new MysqlDB; // 只有一行的改变 业务逻辑不需要改变 方便第三方扩展
    your_business( dataBase2 );

    /**
     * @brief 可以发现 , 仅有实例化的对象不同
     */
    return 0;
}